home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-04-22 | 64.2 KB | 2,101 lines | [TEXT/MPS ] |
- /*
- File: Facet.cpp
-
- Contains: Implementation of class ODFacet
-
- Owned by: Joshua Susser
-
- Copyright: © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
-
- Change History (most recent first):
-
- <2> 3/14/96 EL 1322489 OD Corrupts value of memory loc 18
- because it does not check for null in
- GetParent
- <52> 10/18/95 JBS 1288922 don't force DrawActiveBorder, wait
- for Window::Update; 1293224 use internal
- transform in DrawActiveBorder; 1293393
- don't invert a lone external transform
- <51> 10/18/95 TJ Accessing Link though public methods now.
- <50> 10/17/95 jpa 1291724: Prevent crashes in
- CreateEmbeddedFacet if e.g. part's
- DisplayFrameConnected fails. 1289153:
- Prevent corruption of FacetNode tree when
- deleting facets.
- <49> 10/8/95 TJ Fixes Recomended by Refball
- <48> 9/18/95 JBS 1278337 use kODErrCanvasHasNoOwner
- <47> 9/18/95 JBS 1278337 use kODErrCanvasHasNoOwner
- <46> 9/13/95 DM 1277216 GM:API return no ODPoints nor
- ODPolygons
- <45> 9/8/95 JBS 1282464 call AdjustBorderShape(NULL) in
- ChangeActiveShape; 1283130
- DrawActiveBorder: THROW if
- AdjustBorderShape returns NULL
- <44> 8/31/95 JBS 1278337 error code cleanup
- <43> 8/29/95 JBS 1261682 allow NULL shape param for Update,
- Draw, DrawChildren[Always]; 1265527 return
- error if NULL owner for canvas in
- CreateEmbeddedFacet; 1280635 fix getting
- node of sibling facet; 1280637 problem in
- ChangeCavas notifying parts; 1280991
- ChangeCanvas should inval aggGeometry
- <42> 8/21/95 NP 1274946:
- kODErrInvalidCanvas->kODErrCanvasNotFound
- <41> 8/7/95 JBS 1275083 move Facet inval code to Canvas
- <40> 8/3/95 RR #1257260: Collapse B classes. Remove
- somInit methods. Don't call IsInitialized
- or SubclassResponsibility
- <39> 6/29/95 DM 1242642 BB: refcounting: acquire member
- vars (not locals) when possible.
- <38> 6/26/95 TÇ 1242642 BB:Fix refcounting bugs
- <37> 6/23/95 JBS 1237891 invalidateAggregateClipShape of
- children when internalTranformChange
- <36> 6/23/95 JBS 1251627 fix refcounting throughout file
- <35> 6/21/95 JBS 1259494: OK for extTform to be kODNULL
- <34> 6/20/95 JBS 1257315 change AcquireWindow to GetWindow;
- 1260681 remove BaseFacet class
- <33> 5/31/95 JBS 1232127 fixed typo in GetFrameTransform
- <32> 5/26/95 RR #1251403: Multithreading naming support
- <31> 5/25/95 jpa List.h --> LinkList.h [1253324]
- <30> 5/17/95 JBS 1240846 fix active border updating; 1250177
- fix ODCanvas::AcquireOwner refcounting
- <29> 5/15/95 JBS 1240846 flush activeBorderShape when
- aggregate clip shape invalidated; 1237811
- notify part via GeometryChanged in
- InternalTransformChanged; 1245156 implement
- Purge
- <28> 5/10/95 JBS 1214984 DrawChildren and DrawChildrenAlways
- don't convert the invalidShape; 1224727
- Facet hit-testing calls should take point
- param in frame coords; 1227547 Coordinate
- system for ODWindow::Update and
- ODFacet::Update
- <27> 5/2/95 JBS 1243371 fix some exception names
- <26> 4/28/95 JBS 1242501 added top-level SOM exception
- handling; 1234639 ContainsPoint can now
- deal with NULL clipShape; 1243382
- ::AcquireWindowAggregateClipShape smashes
- ClipShape; 1229231, 1236877, 1227187 fixed
- mem leaks in Invalidate,
- InvalidateActiveBorder, DrawActiveBorder
- <25> 4/27/95 JBS 1209506 $5 comments eliminated
- <24> 4/14/95 JBS 1216535 use part's storageUnit instead of
- frame's to get Session in RemoveFacet
- <23> 3/8/95 JBS 1165158 AdjustBorderShape implementation
- <22> 2/28/95 JBS 1198509 added fActiveBorderShape, moved
- active border display code to border.cpp
- <21> 1/13/95 RR Remove MouseEnter, MouseWithin and
- MouseLeave
- <20> 1/5/95 JBS 1174640: offscreen canvas drawing broken;
- 1201572: Invalidate smashes window origin
- <19> 12/20/94 jpa Modified AcquireAggregateClipShape to set
- geometry mode of aggregate clip shape to
- kODLoseGeometry; should speed up clipping.
- [1168281]
- <18> 12/20/94 jpa Use kODLoseGeometry mode for clip shapes
- [1168281]
- <17> 11/2/94 eeh #1179885 (for JBS): stop
- AcquireAggregateClipShape from smashing
- clipShape.
- <16> 10/18/94 JBS 1188065: change return type of DragEnter &
- DragWithin to ODDragResult
- <15> 9/29/94 JBS 1188214: more coord bias impl
- <14> 9/29/94 RA 1189812: Mods for 68K build.
- <13> 9/22/94 JBS 1188214: coordinate bias implementation
- <12> 8/31/94 TÇ #1183129, #1183116, #1183119, #1183111:
- Lots of ErrorCode cleanup.
- <11> 8/24/94 JBS 1181909: new active border appearance
- <10> 8/18/94 jpa Filled in imaging factories [1180387]
- <9> 8/16/94 JBS 1180387: add CreateCanvas()
- <8> 8/15/94 JBS 1180387: added Imaging factory methods
- <7> 8/12/94 JBS 1179920: move fWindow from Facet to Frame
- <6> 8/10/94 JBS 1179919: coordinate system bias changes
- <5> 8/9/94 VL 1179857: DragEnter and DragWithin return
- ODBoolean.
- <4> 8/5/94 JBS #1179151 Part API cleanup
- <3> 7/17/94 TÇ use ODDeleteObject() when deleting objects
- in the somUninit method.
- <2> 7/7/94 JBS un-commented code
- <1> 6/30/94 JBS first checked in
- <0> 6/30/94 SV SOMverted
- <7> 5/9/94 MB #1162181: Changes necessary to install MMM.
- <6> 4/6/94 JBS 1155477
- <5> 3/29/94 JBS 1153059 ::ChangeCanvas() - notify parts
- <4> 3/28/94 CG 1153547: Renamed XMPSessn.h to XMPSessM.h
- <3> 3/25/94 JA JBS: Changes to ChangeHighlight (1148310)
- <2> 3/15/94 MB Changes to support SCpp/ASLM builds,
- #1150864.
- <1> 3/11/94 JBS first checked in
- <5> 2/17/94 JBS help fix#1142976
- <4> 2/17/94 JBS #1142976 fix inconsistent facet coords,
- #1144049 ChangeExternalTransform notifies
- parts of child facets
- <3> 2/16/94 JA Include new AltPoint.h.
- <2> 2/15/94 JBS RADAR bug #1141506 - fix grafPort origin
- restoration in invalidation methods
- <21> 2/7/94 JA Capitalized THROW.
- <20> 2/7/94 JA Utility.h --> XMPUtils.h
- <19> 2/3/94 JA Tiger Team Makeover!
- <18> 2/1/94 SS SS: RootFacet fix to ::Update
- JBS: Offscreen canvas fixes, better
- in/validating
- <17> 1/26/94 RR Call Dispatcher::InvalidateFacetUnderMouse
- <16> 1/24/94 SS Checkin for Joshua (see below)
- <15+> 1/13/94 JBS active border displays fActiveShape
- added offscreen canvas support
- <15> 1/20/94 SS Transform fix to GetAggregrateClipShape
- <14> 1/11/94 TÇ Init... changes
- <13> 12/21/93 JBS InitFacet changes
- <12> 12/15/93 JBS add fActiveShape & fWindow, plus accessors
- <11> 12/3/93 TÇ return ODFacet* from CreateEmebeddedFacet
- <10> 12/3/93 TÇ Stop including ODError.h, it is included
- as ErrorDef.h inside Except.h
- <9> 11/24/93 JA cfront fixes.
- <8> 11/24/93 VL Rolled back changes as ASLM build breaks
- the THINK build.
- <7> 11/23/93 VL Made this work with ASLM.
- <6> 11/23/93 JA Use new Shape API.
- <5> 11/19/93 PH Add casts to fix for CFront/ASLM
- <4> 11/18/93 JBS remove fWindow, add mouse tracking
- <3> 11/16/93 JBS add child drawing and moving methods
- <2> 11/16/93 JBS add fIsSelected, fHighlight
- <1> 11/13/93 JBS first checked in
-
- In Progress:
-
- */
-
- #define ODFacet_Class_Source
-
- #ifndef SOM_ODFacet_xih
- #define VARIABLE_MACROS
- #include <Facet.xih>
- #endif
-
- #ifndef _ALTPOINT_
- #include "AltPoint.h"
- #endif
-
- #ifndef _FACETNOD_
- #include "FacetNod.h"
- #endif
-
- #ifndef SOM_ODFacetIterator_xh
- #include "FacetItr.xh"
- #endif
-
- #ifndef SOM_ODFrame_xh
- #include <Frame.xh>
- #endif
-
- #ifndef SOM_ODPart_xh
- #include <Part.xh>
- #endif
-
- #ifndef SOM_ODCanvas_xh
- #include <Canvas.xh>
- #endif
-
- #ifndef SOM_ODShape_xh
- #include <Shape.xh>
- #endif
-
- #ifndef SOM_ODTransform_xh
- #include <Trnsform.xh>
- #endif
-
- #ifndef SOM_ODWindow_xh
- #include <Window.xh>
- #endif
-
- #ifndef SOM_ODSession_xh
- #include <ODSessn.xh>
- #endif
-
- #ifndef SOM_ODDispatcher_xh
- #include <Disptch.xh>
- #endif
-
- #ifndef SOM_ODStorageUnit_xh
- #include <StorageU.xh>
- #endif
-
- #ifndef _LINKLIST_
- #include "LinkList.h"
- #endif
-
- #ifndef _NODE_
- #include "Node.h"
- #endif
-
- #ifndef _EXCEPT_
- #include "Except.h"
- #endif
-
- #ifndef _ODUTILS_
- #include <ODUtils.h>
- #endif
-
- #ifndef _ODTYPES_
- #include <ODTypes.h>
- #endif
-
- #ifndef _ODMEMORY_
- #include "ODMemory.h"
- #endif
-
- #ifndef _ODMATH_
- #include "ODMath.h"
- #endif
-
- #ifndef _FOCUSLIB_
- #include "FocusLib.h"
- #endif
-
- #ifndef _BIAS_
- #include "Bias.h"
- #endif
-
- #ifndef _BORDER_
- #include "Border.h"
- #endif
-
- #ifndef _ODDEBUG_
- #include "ODDebug.h"
- #endif
-
- #ifndef som_h
- #include "som.h"
- #endif
-
- #ifndef __PRINTING__
- #include <Printing.h>
- #endif
-
- #ifndef _TEMPOBJ_
- #include "TempObj.h"
- #endif
-
- #pragma segment ODFacet
-
-
- //=====================================================================================
- // Constants
- //=====================================================================================
-
- #define kNoBias kODNULL
-
- //=====================================================================================
- // ODFacet
- //=====================================================================================
-
- //------------------------------------------------------------------------------
- // ODFacet: somUninit
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetsomUninit(ODFacet *somSelf)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","somUninit");
-
- ODSafeReleaseObject(_fFrame);
- ODSafeReleaseObject(_fClipShape);
- ODSafeReleaseObject(_fActiveShape);
- ODSafeReleaseObject(_fExternalTransform);
-
- if( _fNode ) {
- Node* parent = _fNode->GetParent();
- if (parent)
- parent->RemoveChild(*_fNode);
- delete _fNode;
- }
-
- ODSafeReleaseObject(_fAggregateClipShape);
- ODSafeReleaseObject(_fWindowAggregateClipShape);
- ODSafeReleaseObject(_fFrameTransform);
- ODSafeReleaseObject(_fContentTransform);
- ODSafeReleaseObject(_fWindowFrameTransform);
- ODSafeReleaseObject(_fWindowContentTransform);
- ODSafeReleaseObject(_fActiveBorderShape);
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: InitFacet
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetInitFacet(ODFacet *somSelf, Environment *ev,
- ODFrame* frame,
- ODShape* clipShape,
- ODTransform* externalTransform,
- ODCanvas* canvas,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","InitFacet");
-
- SOM_TRY
-
- if ( frame == kODNULL ) THROW(kODErrIllegalNullFrameInput);
-
- /* Moved from somInit. SOM itself sets fields to zero
- _fFrame = kODNULL;
- _fClipShape = kODNULL;
- _fActiveShape = kODNULL;
- _fExternalTransform = kODNULL;
- _fCanvas = kODNULL;
- _fPartInfo = kODNULL;
- _fIsSelected = kODFalse;
-
- _fNode = kODNULL;
- _fNeedsUpdate = kODFalse;
- _fIsUpdating = kODFalse;
-
- _fAggregateClipShape = kODNULL;
- _fWindowAggregateClipShape = kODNULL;
- _fFrameTransform = kODNULL;
- _fContentTransform = kODNULL;
- _fWindowFrameTransform = kODNULL;
- _fWindowContentTransform = kODNULL;
- _fActiveBorderShape = kODNULL;
- */
- _fHighlight = kODNoHighlight;
-
- somSelf->InitObject(ev);
-
-
- _fFrame = frame;
- ODAcquireObject(ev, _fFrame);
-
- _fClipShape = BiasShapeSet(ev, clipShape, biasCanvas);
- ODAcquireObject(ev, _fClipShape);
-
- _fExternalTransform = BiasTransformSet(ev, externalTransform, biasCanvas);
- ODAcquireObject(ev, _fExternalTransform);
-
- if ( canvas )
- {
- _fCanvas = canvas;
- _fCanvas->SetFacet(ev, somSelf);
- }
-
- _fNode = new FacetNode(somSelf); // must be a root facet!
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: InitChildFacet
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetInitChildFacet(ODFacet *somSelf, Environment *ev,
- FacetNode* node,
- ODFrame* frame,
- ODShape* clipShape,
- ODTransform* externalTransform,
- ODCanvas* canvas,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","InitChildFacet");
-
- SOM_TRY
-
- if ( node == kODNULL ) THROW(kODErrIllegalNullFacetInput);
- if ( frame == kODNULL ) THROW(kODErrIllegalNullFrameInput);
-
- /* Moved from somInit. SOM itself sets fields to zero
- _fFrame = kODNULL;
- _fClipShape = kODNULL;
- _fActiveShape = kODNULL;
- _fExternalTransform = kODNULL;
- _fCanvas = kODNULL;
- _fPartInfo = kODNULL;
- _fIsSelected = kODFalse;
-
- _fNode = kODNULL;
- _fNeedsUpdate = kODFalse;
- _fIsUpdating = kODFalse;
-
- _fAggregateClipShape = kODNULL;
- _fWindowAggregateClipShape = kODNULL;
- _fFrameTransform = kODNULL;
- _fContentTransform = kODNULL;
- _fWindowFrameTransform = kODNULL;
- _fWindowContentTransform = kODNULL;
- _fActiveBorderShape = kODNULL;
- */
- _fNode = node;
-
- _fHighlight = kODNoHighlight;
- somSelf->InitObject(ev);
-
- _fFrame = frame;
- ODAcquireObject(ev, _fFrame);
-
- _fClipShape = BiasShapeSet(ev, clipShape, biasCanvas);
- ODAcquireObject(ev, _fClipShape);
-
- _fExternalTransform = BiasTransformSet(ev, externalTransform, biasCanvas);
- ODAcquireObject(ev, _fExternalTransform);
-
- if ( canvas )
- {
- _fCanvas = canvas;
- _fCanvas->SetFacet(ev, somSelf);
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: Purge
- //------------------------------------------------------------------------------
-
- SOM_Scope ODSize SOMLINK ODFacetPurge(ODFacet *somSelf, Environment *ev,
- ODSize size)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","Purge");
-
- ODSize freed = 0; ODVolatile(freed);
-
- SOM_TRY
- // purge non-computed objects
- if ( _fCanvas ) freed += _fCanvas->Purge(ev, size-freed);
- if ( _fClipShape ) freed += _fClipShape->Purge(ev, size-freed);
- if ( _fActiveShape ) freed += _fActiveShape->Purge(ev, size-freed);
- if ( _fExternalTransform ) freed += _fExternalTransform->Purge(ev, size-freed);
- if ( _fActiveBorderShape ) freed += _fActiveBorderShape->Purge(ev, size-freed);
-
- // flush cached geometry, purging first if other owners
- if ( _fAggregateClipShape )
- {
- if ( _fAggregateClipShape->GetRefCount(ev) > 1 )
- freed += _fAggregateClipShape->Purge(ev, size-freed);
- ODReleaseObject(ev, _fAggregateClipShape);
- }
-
- if ( _fWindowAggregateClipShape )
- {
- if ( _fWindowAggregateClipShape->GetRefCount(ev) > 1 )
- freed += _fWindowAggregateClipShape->Purge(ev, size-freed);
- ODReleaseObject(ev, _fWindowAggregateClipShape);
- }
-
- if ( _fFrameTransform )
- {
- if ( _fFrameTransform->GetRefCount(ev) > 1 )
- freed += _fFrameTransform->Purge(ev, size-freed);
- ODReleaseObject(ev, _fFrameTransform);
- }
-
- if ( _fContentTransform )
- {
- if ( _fContentTransform->GetRefCount(ev) > 1 )
- freed += _fContentTransform->Purge(ev, size-freed);
- ODReleaseObject(ev, _fContentTransform);
- }
-
- if ( _fWindowFrameTransform )
- {
- if ( _fWindowFrameTransform->GetRefCount(ev) > 1 )
- freed += _fWindowFrameTransform->Purge(ev, size-freed);
- ODReleaseObject(ev, _fWindowFrameTransform);
- }
-
- if ( _fWindowContentTransform )
- {
- if ( _fWindowContentTransform->GetRefCount(ev) > 1 )
- freed += _fWindowContentTransform->Purge(ev, size-freed);
- ODReleaseObject(ev, _fWindowContentTransform);
- }
-
- // dh - call parent's purge method
- freed += parent_Purge(somSelf, ev, size);
- SOM_CATCH_ALL
- WARN("Error %ld trying to purge in ODFacetPurge",ErrorCode());
- SetErrorCode(kODNoError); // dh - Eat the exception; Purge should not
- // propagate it because clients function
- // fine whether memory was purged or not.
- SOM_ENDTRY
-
- return freed;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: GetFrame
- //------------------------------------------------------------------------------
-
- SOM_Scope ODFrame* SOMLINK ODFacetGetFrame(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","GetFrame");
-
- return _fFrame;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: CreateEmbeddedFacet
- //------------------------------------------------------------------------------
-
- SOM_Scope ODFacet* SOMLINK ODFacetCreateEmbeddedFacet(ODFacet *somSelf, Environment *ev,
- ODFrame* frame,
- ODShape* clipShape,
- ODTransform* externalTransform,
- ODCanvas* canvas,
- ODCanvas* biasCanvas,
- ODFacet* siblingFacet,
- ODFramePosition position)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","CreateEmbeddedFacet");
-
- ODFacet* newFacet = kODNULL; ODVolatile(newFacet);
- FacetNode* newNode = kODNULL; ODVolatile(newNode);
- FacetNode* childNode = kODNULL;
-
- SOM_TRY
- if ( frame == kODNULL )
- THROW(kODErrIllegalNullFrameInput);
- if ( canvas != kODNULL )
- {
- TempODPart owner = canvas->AcquireOwner(ev);
- if ( (ODPart*)owner == kODNULL )
- THROW(kODErrCanvasHasNoOwner);
- }
-
- newFacet = new ODFacet();
- THROW_IF_NULL(newFacet);
-
- newNode = new FacetNode(newFacet);
- THROW_IF_NULL(newNode);
-
- if ( siblingFacet != kODNULL )
- childNode = siblingFacet->GetNode(ev);
-
- if ( position == kODFrameInFront )
- {
- if ( childNode != kODNULL )
- _fNode->AddChildBefore(*childNode, newNode);
- else
- _fNode->AddChildFirst(newNode);
- }
- else if ( position == kODFrameBehind )
- {
- if ( childNode != kODNULL )
- _fNode->AddChildAfter(*childNode, newNode);
- else
- _fNode->AddChildLast(newNode);
- }
- else
- THROW(kODErrUnsupportedFramePositionCode);
-
- newFacet->InitChildFacet(ev, newNode, frame, clipShape, externalTransform,
- canvas, biasCanvas);
- newNode = kODNULL; // owned by facet now
- frame->FacetAdded(ev, newFacet);
- SOM_CATCH_ALL
- ODDeleteObject(newFacet);
- if( newNode ) {
- Node* parent = _fNode->GetParent();
- if (parent)
- parent->RemoveChild(*newNode);
- delete newNode;
- }
- SOM_ENDTRY
- return newFacet;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: RemoveFacet
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetRemoveFacet(ODFacet *somSelf, Environment *ev,
- ODFacet* facet)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","RemoveFacet");
-
- SOM_TRY
- ASSERT( (facet->GetContainingFacet(ev) == somSelf), kODErrInvalidFacet);
-
- // must get StorageUnit from part as frame might be non-persistent
- TempODPart tempPart = _fFrame->AcquirePart(ev);
- tempPart->GetStorageUnit(ev)->GetSession(ev)->
- GetDispatcher(ev)->InvalidateFacetUnderMouse(ev);
- _fNode->RemoveChild(*(facet->GetNode(ev)));
- facet->GetFrame(ev)->FacetRemoved(ev, facet); // tells part to remove children
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: MoveBefore
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetMoveBefore(ODFacet *somSelf, Environment *ev,
- ODFacet* child,
- ODFacet* sibling)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","MoveBefore");
-
- SOM_TRY
- Node* childNode;
- Node* siblingNode;
-
- if ( child )
- {
- childNode = child->GetNode(ev);
- _fNode->RemoveChild(*childNode);
- if ( sibling )
- {
- siblingNode = sibling->GetNode(ev);
- _fNode->AddChildBefore(*siblingNode, childNode);
- }
- else
- {
- _fNode->AddChildFirst(childNode);
- }
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: MoveBehind
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetMoveBehind(ODFacet *somSelf, Environment *ev,
- ODFacet* child,
- ODFacet* sibling)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","MoveBehind");
-
- SOM_TRY
- Node* childNode;
- Node* siblingNode;
-
- if ( child )
- {
- childNode = child->GetNode(ev);
- _fNode->RemoveChild(*childNode);
- if ( sibling )
- {
- siblingNode = sibling->GetNode(ev);
- _fNode->AddChildAfter(*siblingNode, childNode);
- }
- else
- {
- _fNode->AddChildLast(childNode);
- }
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: GetContainingFacet
- //------------------------------------------------------------------------------
-
- SOM_Scope ODFacet* SOMLINK ODFacetGetContainingFacet(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","GetContainingFacet");
-
- SOM_TRY
- FacetNode* parent = (FacetNode*) _fNode->GetParent();
- if (parent)
- return parent->GetFacet();
- else
- return kODNULL;
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: CreateFacetIterator
- //------------------------------------------------------------------------------
-
- SOM_Scope ODFacetIterator* SOMLINK ODFacetCreateFacetIterator(ODFacet *somSelf, Environment *ev,
- ODTraversalType traversalType,
- ODSiblingOrder siblingOrder)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","CreateFacetIterator");
-
- ODFacetIterator* iter = kODNULL; ODVolatile(iter);
- SOM_TRY
- iter = new ODFacetIterator();
- THROW_IF_NULL(iter);
- iter->InitFacetIterator(ev, somSelf, traversalType, siblingOrder);
- SOM_CATCH_ALL
- ODDeleteObject(iter);
- iter = kODNULL;
- SOM_ENDTRY
- return iter;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: ChangeGeometry
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetChangeGeometry(ODFacet *somSelf, Environment *ev,
- ODShape* clipShape,
- ODTransform* transform,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","ChangeGeometry");
-
- SOM_TRY
- ODBoolean clipShapeChanged = kODFalse;
- ODBoolean externalTransformChanged = kODFalse;
-
- if ( clipShape )
- {
- ODAcquireObject(ev, clipShape);
- ODReleaseObject(ev, _fClipShape);
- _fClipShape = BiasShapeSet(ev, clipShape, biasCanvas);
- clipShapeChanged = kODTrue;
- somSelf->InvalidateAggregateClipShape(ev);
- }
-
- if ( transform )
- {
- ODAcquireObject(ev, transform);
- ODReleaseObject(ev, _fExternalTransform);
- _fExternalTransform = BiasTransformSet(ev, transform, biasCanvas);
- externalTransformChanged = kODTrue;
- somSelf->InvalidateAggregateTransforms(ev);
- somSelf->InvalidateAggregateClipShape(ev);
- }
-
- ODFacetIterator* i = new ODFacetIterator();
- THROW_IF_NULL(i);
- i->InitFacetIterator(ev, somSelf, kODTopDown, kODFrontToBack);
- for (ODFacet* facet = i->First(ev); i->IsNotComplete(ev); facet = i->Next(ev))
- {
- TempODPart tempPart = facet->GetFrame(ev)->AcquirePart(ev);
- tempPart->GeometryChanged(ev, facet, clipShapeChanged, externalTransformChanged);
- }
- ODDeleteObject(i);
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: CreateShape
- //------------------------------------------------------------------------------
-
- SOM_Scope ODShape* SOMLINK ODFacetCreateShape(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","CreateShape");
-
- ODShape *s = kODNULL; ODVolatile(s);
- SOM_TRY
- s = new ODShape;
- THROW_IF_NULL(s);
- s->InitShape(ev);
- SOM_CATCH_ALL
- ODDeleteObject(s);
- s = kODNULL;
- SOM_ENDTRY
- return s;
- }
-
-
- //------------------------------------------------------------------------------
- // ODFacet: AcquireClipShape
- //------------------------------------------------------------------------------
-
- SOM_Scope ODShape* SOMLINK ODFacetAcquireClipShape(ODFacet *somSelf, Environment *ev,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","AcquireClipShape");
-
- SOM_TRY
- if ( _fClipShape )
- return BiasShapeGet(ev, _fClipShape, biasCanvas);
- else
- return ODCopyAndRelease(ev, _fFrame->AcquireFrameShape(ev, biasCanvas));
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: AcquireAggregateClipShape
- //------------------------------------------------------------------------------
-
- SOM_Scope ODShape* SOMLINK ODFacetAcquireAggregateClipShape(ODFacet *somSelf, Environment *ev,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","AcquireAggregateClipShape");
-
- SOM_TRY
- if ( !_fAggregateClipShape )
- {
- ODFacet* parent = somSelf->GetContainingFacet(ev);
-
- // Determine whether canvas is geometric or whether we can punt to regions: [jpa]
- ODGeometryMode mode = _fCanvas ?GetCanvasGeometryMode(ev,_fCanvas)
- :kODLoseGeometry;
-
- if ( _fCanvas && _fCanvas->IsOffscreen(ev) )
- {
- _fAggregateClipShape = ODCopyAndRelease(ev, _fFrame->AcquireFrameShape(ev, kODNULL));
- _fAggregateClipShape->SetGeometryMode(ev,mode);
- }
- else
- {
- _fAggregateClipShape = ODCopyAndRelease(ev, somSelf->AcquireClipShape(ev, kODNULL));
- _fAggregateClipShape->SetGeometryMode(ev,mode);
- if ( parent )
- {
- TempODShape parentClip = kODNULL;
- TempODTransform xform = kODNULL;
- parentClip = ODCopyAndRelease(ev, parent->AcquireAggregateClipShape(ev, kODNULL));
- xform = ODCopyAndRelease(ev,
- parent->GetFrame(ev)->AcquireInternalTransform(ev, kODNULL));
- if ( _fExternalTransform != kODNULL )
- xform->PreCompose(ev, _fExternalTransform);
- parentClip->InverseTransform(ev, xform);
- _fAggregateClipShape->Intersect(ev, parentClip);
- }
- }
- }
- return BiasShapeGet(ev, _fAggregateClipShape, biasCanvas);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: AcquireWindowAggregateClipShape
- //------------------------------------------------------------------------------
-
- SOM_Scope ODShape* SOMLINK ODFacetAcquireWindowAggregateClipShape(ODFacet *somSelf, Environment *ev,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","AcquireWindowAggregateClipShape");
-
- SOM_TRY
- ODFacet* parent = somSelf->GetContainingFacet(ev);
-
- if ( !_fWindowAggregateClipShape )
- {
- // Determine whether canvas is geometric or whether we can punt to regions: [jpa]
- ODGeometryMode mode = _fCanvas ?GetCanvasGeometryMode(ev,_fCanvas)
- :kODLoseGeometry;
- _fWindowAggregateClipShape = ODCopyAndRelease(ev, somSelf->AcquireClipShape(ev, kNoBias));
- _fWindowAggregateClipShape->SetGeometryMode(ev,mode);
- if ( parent )
- {
- TempODShape parentClip = kODNULL;
- TempODTransform xform = kODNULL;
- parentClip = ODCopyAndRelease(ev, parent->AcquireWindowAggregateClipShape(ev, kNoBias));
- xform = ODCopyAndRelease(ev,
- parent->GetFrame(ev)->AcquireInternalTransform(ev, kODNULL));
- if ( _fExternalTransform != kODNULL )
- xform->PreCompose(ev, _fExternalTransform);
- parentClip->InverseTransform(ev, xform);
- _fWindowAggregateClipShape->Intersect(ev, parentClip);
- }
- }
- return BiasShapeGet(ev, _fWindowAggregateClipShape, biasCanvas);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: InvalidateAggregateClipShape
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetInvalidateAggregateClipShape(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","InvalidateAggregateClipShape");
-
- SOM_TRY
- // flush aggregate clip shapes
- ODReleaseObject(ev, _fAggregateClipShape);
- ODReleaseObject(ev, _fWindowAggregateClipShape);
-
- // must flush cached border shape, as it is based on aggClipShape
- if ( _fActiveBorderShape != kODNULL )
- somSelf->InvalidateActiveBorder(ev);
-
- LinkedListIterator iter((LinkedList*)_fNode);
- for (FacetNode* node = (FacetNode*) iter.First();
- iter.IsNotComplete();
- node = (FacetNode*) iter.Next())
- {
- node->GetFacet()->InvalidateAggregateClipShape(ev);
- }
-
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: AcquireActiveShape
- //------------------------------------------------------------------------------
-
- SOM_Scope ODShape* SOMLINK ODFacetAcquireActiveShape(ODFacet *somSelf, Environment *ev,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","AcquireActiveShape");
-
- SOM_TRY
- if ( _fActiveShape )
- return BiasShapeGet(ev, _fActiveShape, biasCanvas);
- else
- return ODCopyAndRelease(ev, _fFrame->AcquireFrameShape(ev, biasCanvas));
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: ChangeActiveShape
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetChangeActiveShape(ODFacet *somSelf, Environment *ev,
- ODShape* activeShape,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","ChangeActiveShape");
-
- SOM_TRY
- if ( _fActiveBorderShape != kODNULL )
- {
- somSelf->InvalidateActiveBorder(ev);
- ODFacet* contFacet = somSelf->GetContainingFacet(ev);
- if ( contFacet != kODNULL )
- {
- TempODPart part = contFacet->GetFrame(ev)->AcquirePart(ev);
- part->AdjustBorderShape(ev, somSelf, kODNULL);
- }
- }
-
- ODAcquireObject(ev, activeShape);
- ODReleaseObject(ev, _fActiveShape);
- _fActiveShape = BiasShapeSet(ev, activeShape, biasCanvas);
-
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFrame: CreateTransform
- //------------------------------------------------------------------------------
-
- SOM_Scope ODTransform* SOMLINK ODFacetCreateTransform(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","CreateTransform");
-
- ODTransform *t = kODNULL; ODVolatile(t);
-
- SOM_TRY
- t = new ODTransform;
- THROW_IF_NULL(t);
- t->InitTransform(ev);
- SOM_CATCH_ALL
- ODDeleteObject(t);
- t = kODNULL;
- SOM_ENDTRY
- return t;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: AcquireExternalTransform
- //------------------------------------------------------------------------------
-
- SOM_Scope ODTransform* SOMLINK ODFacetAcquireExternalTransform(ODFacet *somSelf, Environment *ev,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","AcquireExternalTransform");
-
- ODTransform* xform = kODNULL;
-
- SOM_TRY
- if ( _fExternalTransform != kODNULL )
- xform = _fExternalTransform;
- else
- xform = somSelf->CreateTransform(ev);
- return BiasTransformGet(ev, xform, biasCanvas);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: AcquireFrameTransform
- //------------------------------------------------------------------------------
-
- SOM_Scope ODTransform* SOMLINK ODFacetAcquireFrameTransform(ODFacet *somSelf, Environment *ev,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","AcquireFrameTransform");
-
- SOM_TRY
- ODFacet* parent = somSelf->GetContainingFacet(ev);
-
- if ( !_fFrameTransform )
- {
- if ( _fCanvas )
- {
- if ( _fFrame->IsRoot(ev) && (_fExternalTransform != kODNULL) )
- _fFrameTransform = _fExternalTransform->Copy(ev);
- else
- _fFrameTransform = somSelf->CreateTransform(ev);
- }
- else
- {
- if ( _fExternalTransform != kODNULL )
- _fFrameTransform = _fExternalTransform->Copy(ev);
- else
- _fFrameTransform = somSelf->CreateTransform(ev);
- if ( parent )
- {
- TempODTransform xform = parent->AcquireContentTransform(ev, kODNULL);
- _fFrameTransform->PostCompose(ev, xform);
- }
- }
- }
- return BiasTransformGet(ev, _fFrameTransform, biasCanvas);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: AcquireContentTransform
- //------------------------------------------------------------------------------
-
- SOM_Scope ODTransform* SOMLINK ODFacetAcquireContentTransform(ODFacet *somSelf, Environment *ev,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","AcquireContentTransform");
-
- SOM_TRY
- if (!_fContentTransform)
- {
- _fContentTransform = ODCopyAndRelease(ev, _fFrame->AcquireInternalTransform(ev, kODNULL));
- TempODTransform xform = somSelf->AcquireFrameTransform(ev, kODNULL);
- _fContentTransform->PostCompose(ev, xform);
- }
- return BiasTransformGet(ev, _fContentTransform, biasCanvas);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: AcquireWindowFrameTransform
- //------------------------------------------------------------------------------
-
- SOM_Scope ODTransform* SOMLINK ODFacetAcquireWindowFrameTransform(ODFacet *somSelf, Environment *ev,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","AcquireWindowFrameTransform");
-
- SOM_TRY
- ODFacet* parent = somSelf->GetContainingFacet(ev);
-
- if (!_fWindowFrameTransform)
- {
- if ( _fExternalTransform != kODNULL )
- _fWindowFrameTransform = _fExternalTransform->Copy(ev);
- else
- _fWindowFrameTransform = somSelf->CreateTransform(ev);
- if (parent)
- {
- TempODTransform xform = parent->AcquireWindowContentTransform(ev, kODNULL);
- _fWindowFrameTransform->PostCompose(ev, xform);
- }
- }
- return BiasTransformGet(ev, _fWindowFrameTransform, biasCanvas);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: AcquireWindowContentTransform
- //------------------------------------------------------------------------------
-
- SOM_Scope ODTransform* SOMLINK ODFacetAcquireWindowContentTransform(ODFacet *somSelf, Environment *ev,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","AcquireWindowContentTransform");
-
- SOM_TRY
- if (!_fWindowContentTransform)
- {
- _fWindowContentTransform = ODCopyAndRelease(ev, _fFrame->AcquireInternalTransform(ev, kODNULL));
- TempODTransform xform = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- _fWindowContentTransform->PostCompose(ev, xform);
- }
- return BiasTransformGet(ev, _fWindowContentTransform, biasCanvas);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: InternalTransformChanged
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetInternalTransformChanged(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","InternalTransformChanged");
-
- ODFacetIterator* facets = kODNULL; ODVolatile(facets);
- ODFacet* facet = kODNULL;
-
- SOM_TRY
- ODReleaseObject(ev, _fContentTransform);
- ODReleaseObject(ev, _fWindowContentTransform);
-
- // invalidate children
- LinkedListIterator iter((LinkedList*)_fNode);
- for (FacetNode* node = (FacetNode*) iter.First();
- iter.IsNotComplete();
- node = (FacetNode*) iter.Next())
- {
- node->GetFacet()->InvalidateAggregateClipShape(ev);
- node->GetFacet()->InvalidateAggregateTransforms(ev);
- }
-
- facets = somSelf->CreateFacetIterator(ev, kODTopDown, kODFrontToBack);
- for ( facet = facets->First(ev);
- facets->IsNotComplete(ev);
- facet = facets->Next(ev) )
- {
- TempODPart tempPart = facet->GetFrame(ev)->AcquirePart(ev);
- tempPart->GeometryChanged(ev, facet, kODFalse, kODTrue);
- }
- ODDeleteObject(facets);
-
- SOM_CATCH_ALL
- ODDeleteObject(facets);
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: InvalidateAggregateTransforms
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetInvalidateAggregateTransforms(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","InvalidateAggregateTransforms");
-
- SOM_TRY
- ODReleaseObject(ev, _fFrameTransform);
- ODReleaseObject(ev, _fContentTransform);
- ODReleaseObject(ev, _fWindowFrameTransform);
- ODReleaseObject(ev, _fWindowContentTransform);
-
- // invalidate children
- LinkedListIterator iter((LinkedList*)_fNode);
- for (FacetNode* node = (FacetNode*) iter.First();
- iter.IsNotComplete();
- node = (FacetNode*) iter.Next())
- {
- node->GetFacet()->InvalidateAggregateTransforms(ev);
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: CreateCanvas
- //------------------------------------------------------------------------------
-
- SOM_Scope ODCanvas* SOMLINK ODFacetCreateCanvas(ODFacet *somSelf, Environment *ev,
- ODGraphicsSystem graphicsSystem,
- ODPlatformCanvas platformCanvas,
- ODBoolean isDynamic,
- ODBoolean isOffscreen)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","CreateCanvas");
-
- ODCanvas *c = kODNULL; ODVolatile(c);
-
- SOM_TRY
- c = new ODCanvas;
- THROW_IF_NULL(c);
- c->InitCanvas(ev, graphicsSystem,platformCanvas,isDynamic,isOffscreen);
- SOM_CATCH_ALL
- ODDeleteObject(c);
- c = kODNULL;
- SOM_ENDTRY
- return c;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: HasCanvas
- //------------------------------------------------------------------------------
-
- SOM_Scope ODBoolean SOMLINK ODFacetHasCanvas(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","HasCanvas");
-
- return (_fCanvas != kODNULL);
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: GetCanvas
- //------------------------------------------------------------------------------
-
- SOM_Scope ODCanvas* SOMLINK ODFacetGetCanvas(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","GetCanvas");
-
- SOM_TRY
- if (_fCanvas)
- return _fCanvas;
- else
- {
- ODFacet* parent = somSelf->GetContainingFacet(ev);
- if (parent)
- return parent->GetCanvas(ev);
- else
- THROW(kODErrCanvasNotFound);
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- SOM_Scope void SOMLINK ODFacetChangeCanvas(ODFacet *somSelf, Environment *ev,
- ODCanvas* canvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","ChangeCanvas");
-
- // I don't manage storage for the canvas - that's up to my part!
-
- ODFacetIterator* i = kODNULL; ODVolatile(i);
- SOM_TRY
- if ( canvas != kODNULL )
- {
- TempODPart owner = canvas->AcquireOwner(ev);
- if ( (ODPart*)owner == kODNULL )
- THROW(kODErrCanvasHasNoOwner);
- }
-
- i = new ODFacetIterator();
- THROW_IF_NULL(i);
- i->InitFacetIterator(ev, somSelf, kODTopDown, kODBackToFront);
-
- if ( _fCanvas )
- _fCanvas->SetFacet(ev, kODNULL);
- _fCanvas = canvas;
- if ( _fCanvas )
- {
- _fCanvas->SetFacet(ev, somSelf); // point back to this facet
- TempODShape tempShape = _fFrame->AcquireFrameShape(ev, kODNULL);
- _fCanvas->Invalidate(ev, tempShape); // contents are initially invalid
- }
-
- somSelf->InvalidateAggregateClipShape(ev);
- somSelf->InvalidateAggregateTransforms(ev);
-
- ODBoolean notFirst = kODFalse;
- for (ODFacet* facet = i->First(ev); i->IsNotComplete(ev); facet = i->Next(ev))
- {
- if ( notFirst && facet->HasCanvas(ev) )
- i->SkipChildren(ev);
- else
- {
- TempODPart tempPart = facet->GetFrame(ev)->AcquirePart(ev);
- tempPart->CanvasChanged(ev, somSelf);
- }
- notFirst = kODTrue;
- }
- ODDeleteObject(i);
- SOM_CATCH_ALL
- ODDeleteObject(i);
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: GetWindow
- //------------------------------------------------------------------------------
-
- SOM_Scope ODWindow* SOMLINK ODFacetGetWindow(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","GetWindow");
-
- // this method returns fFrame's window. getting the window from fFrame
- // automatically increments the window's refcount, but because the window
- // in an invariant of the facet we don't want to increment the refcount.
- // so after getting the window from the frame, release it to restore its
- // original refcount.
-
- ODWindow* window = kODNULL;
-
- SOM_TRY
- window = _fFrame->AcquireWindow(ev);
- if (window)
- window->Release(ev); // undo ref bump from frame->AcquireWindow;
- return window;
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODNULL;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: GetPartInfo
- //------------------------------------------------------------------------------
-
- SOM_Scope ODInfoType SOMLINK ODFacetGetPartInfo(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","GetPartInfo");
-
- return _fPartInfo;
- }
-
- SOM_Scope void SOMLINK ODFacetSetPartInfo(ODFacet *somSelf, Environment *ev,
- ODInfoType partInfo)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","SetPartInfo");
-
- _fPartInfo = partInfo;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: DragEnter
- //------------------------------------------------------------------------------
-
- SOM_Scope ODDragResult SOMLINK ODFacetDragEnter(ODFacet *somSelf, Environment *ev,
- ODPoint* point,
- ODDragItemIterator* dragInfo,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","DragEnter");
-
- SOM_TRY
- ODPoint bPoint = BiasPointSet(ev, point, biasCanvas);
- TempODTransform xform = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- xform->InvertPoint(ev, &bPoint);
- TempODPart tempPart = _fFrame->AcquirePart(ev);
- return tempPart->DragEnter(ev, dragInfo, somSelf, &bPoint);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODFalse;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: DragWithin
- //------------------------------------------------------------------------------
-
- SOM_Scope ODDragResult SOMLINK ODFacetDragWithin(ODFacet *somSelf, Environment *ev,
- ODPoint* point,
- ODDragItemIterator* dragInfo,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","DragWithin");
-
- SOM_TRY
- ODPoint bPoint = BiasPointSet(ev, point, biasCanvas);
- TempODTransform xform = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- xform->InvertPoint(ev, &bPoint);
- TempODPart tempPart = _fFrame->AcquirePart(ev);
- return tempPart->DragWithin(ev, dragInfo, somSelf, &bPoint);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODFalse;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: DragLeave
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetDragLeave(ODFacet *somSelf, Environment *ev,
- ODPoint* point,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","DragLeave");
-
- SOM_TRY
- ODPoint bPoint = BiasPointSet(ev, point, biasCanvas);
- TempODTransform xform = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- xform->InvertPoint(ev, &bPoint);
- TempODPart tempPart = _fFrame->AcquirePart(ev);
- tempPart->DragLeave(ev, somSelf, &bPoint);
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: Drop
- //------------------------------------------------------------------------------
-
- SOM_Scope ODDropResult SOMLINK ODFacetDrop(ODFacet *somSelf, Environment *ev,
- ODPoint* point,
- ODDragItemIterator* dropInfo,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","Drop");
-
- SOM_TRY
- ODPoint bPoint = BiasPointSet(ev, point, biasCanvas);
- TempODTransform xform = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- xform->InvertPoint(ev, &bPoint);
- TempODPart tempPart = _fFrame->AcquirePart(ev);
- return tempPart->Drop(ev, dropInfo, somSelf, &bPoint);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODDropFail;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: Update
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetUpdate(ODFacet *somSelf, Environment *ev,
- ODShape* invalidShape,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","Update");
-
- ODFacet* facet = kODNULL;
- ODBoolean notFirst = kODFalse;
-
- SOM_TRY
- _fIsUpdating = kODTrue;
-
- TempODShape bShape = kODNULL;
- if ( invalidShape == kODNULL )
- bShape = ODCopyAndRelease(ev, _fFrame->AcquireFrameShape(ev, kODNULL));
- else
- bShape = BiasShapeSet(ev, invalidShape->Copy(ev), biasCanvas);
-
- // transform bShape into window coords for intersection with
- // shapes of embedded facets
- TempODTransform wfXform = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- bShape->Transform(ev, wfXform);
-
- ODFacetIterator* i = new ODFacetIterator();
- THROW_IF_NULL(i);
- i->InitFacetIterator(ev, somSelf, kODTopDown, kODBackToFront);
- for (facet = i->First(ev); i->IsNotComplete(ev); facet = i->Next(ev))
- {
- TempODShape aggClipShape = facet->AcquireAggregateClipShape(ev, kODNULL);
- TempODShape testShape = aggClipShape->Copy(ev);
- TempODTransform xform = facet->AcquireWindowFrameTransform(ev, kODNULL);
- testShape->Transform(ev, xform);
- // both bShape and testShape are now in window coords
- testShape->Intersect(ev, bShape);
- if ( testShape->IsEmpty(ev) )
- i->SkipChildren(ev);
- else
- {
- facet->SetNeedsUpdate(ev, kODTrue);
-
- // if facet has its own canvas, and facet is not the root facet,
- // let the facet handle updating its children
- if ( facet->HasCanvas(ev) && notFirst )
- i->SkipChildren(ev);
- }
- notFirst = kODTrue;
- }
-
- for (facet = i->First(ev); i->IsNotComplete(ev); facet = i->Next(ev))
- {
- if ( facet->NeedsUpdate(ev) )
- {
- TempODShape testShape = bShape->Copy(ev);
- TempODTransform xform = facet->AcquireWindowFrameTransform(ev, kODNULL);
- testShape->InverseTransform(ev, xform);
- facet->Draw(ev, testShape, kODNULL);
- }
- else
- i->SkipChildren(ev);
- }
-
- _fIsUpdating = kODFalse;
-
- delete i;
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: Invalidate
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetInvalidate(ODFacet *somSelf, Environment *ev,
- ODShape* invalidShape,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","Invalidate");
-
- // Assumes invalidShape is in frame coordinates.
-
- ODCanvas* myCanvas = kODNULL;
- ODFacet* myCanvasFacet = kODNULL;
- ODFacet* myContainingFacet = kODNULL;
- ODFacet* parentCanvasFacet = kODNULL;
-
- SOM_TRY
- ODWindow* window = somSelf->GetWindow(ev);
- if( !window )
- return;
-
- TempODShape tShape = ODCopyAndRelease(ev, somSelf->AcquireAggregateClipShape(ev, kODNULL));
- if ( invalidShape )
- {
- TempODShape bShape = BiasShapeSet(ev, invalidShape->Copy(ev), biasCanvas);
- tShape->Intersect(ev, bShape);
- }
-
- if( !tShape->IsEmpty(ev) )
- {
- myCanvas = somSelf->GetCanvas(ev);
-
- TempODTransform xf1 = somSelf->AcquireFrameTransform(ev, kODNULL);
- tShape->Transform(ev, xf1);
- myCanvas->Invalidate(ev, tShape);
- tShape->InverseTransform(ev, xf1);
-
- if ( myCanvas->IsOffscreen(ev) )
- {
- myCanvasFacet = myCanvas->GetFacet(ev);
- myContainingFacet = myCanvasFacet->GetContainingFacet(ev);
- if ( myContainingFacet )
- parentCanvasFacet = myContainingFacet->GetCanvas(ev)->GetFacet(ev);
- else
- THROW(kODErrFacetNotFound);
-
- TempODTransform xf2 = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- tShape->Transform(ev, xf2);
- TempODTransform xf3 = parentCanvasFacet->AcquireWindowFrameTransform(ev, kODNULL);
- tShape->InverseTransform(ev, xf3);
- parentCanvasFacet->Invalidate(ev, tShape, kODNULL);
- }
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: Validate
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetValidate(ODFacet *somSelf, Environment *ev,
- ODShape* validShape,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","Validate");
-
- // Assumes validShape is in frame coordinates.
-
- ODCanvas* myCanvas = kODNULL;
- ODTransform* xform = kODNULL;
-
- SOM_TRY
- ODWindow* window = somSelf->GetWindow(ev);
- if( !window )
- return;
-
- TempODShape tShape = ODCopyAndRelease(ev, somSelf->AcquireAggregateClipShape(ev, kODNULL));
- if ( validShape )
- {
- TempODShape bShape = BiasShapeSet(ev, validShape->Copy(ev), biasCanvas);
- tShape->Intersect(ev, bShape);
- }
-
- if( !tShape->IsEmpty(ev) )
- {
- myCanvas = somSelf->GetCanvas(ev);
-
- TempODTransform xform = somSelf->AcquireFrameTransform(ev, kODNULL);
- tShape->Transform(ev, xform);
- myCanvas->Validate(ev, tShape);
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: Draw
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetDraw(ODFacet *somSelf, Environment *ev,
- ODShape* invalidShape,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","Draw");
-
- SOM_TRY
- TempODShape bShape = kODNULL;
- if ( invalidShape == kODNULL )
- bShape = ODCopyAndRelease(ev, _fFrame->AcquireFrameShape(ev, kODNULL));
- else
- bShape = BiasShapeSet(ev, invalidShape->Copy(ev), biasCanvas);
-
- if ( _fCanvas && !_fIsUpdating && _fCanvas->IsOffscreen(ev) )
- {
- // repair canvas if needs updating
- TempODShape testShape = bShape->Copy(ev);
- TempODShape updateShape = _fCanvas->AcquireUpdateShape(ev);
- testShape->Intersect(ev, updateShape);
-
- if ( !testShape->IsEmpty(ev) )
- {
- // fix offscreen canvas
- somSelf->Update(ev, bShape, kODNULL);
- }
-
- // tell canvas owner part to copy pixels
- TempODPart owner = _fCanvas->AcquireOwner(ev);
- owner->CanvasUpdated(ev, _fCanvas);
- }
- else
- {
- TempODPart tempPart = _fFrame->AcquirePart(ev);
- tempPart->Draw(ev, somSelf, bShape);
- }
- _fNeedsUpdate = kODFalse;
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: DrawChildren
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetDrawChildren(ODFacet *somSelf, Environment *ev,
- ODShape* invalidShape,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","DrawChildren");
-
- SOM_TRY
- TempODShape bShape = kODNULL;
- if ( invalidShape == kODNULL )
- bShape = ODCopyAndRelease(ev, _fFrame->AcquireFrameShape(ev, kODNULL));
- else
- bShape = BiasShapeSet(ev, invalidShape->Copy(ev), biasCanvas);
- TempODTransform xform = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- bShape->Transform(ev, xform);
-
- ODFacetIterator* i = new ODFacetIterator;
- THROW_IF_NULL(i);
- i->InitFacetIterator(ev, somSelf, kODChildrenOnly, kODBackToFront);
-
- for ( ODFacet* child = i->First(ev); i->IsNotComplete(ev); child = i->Next(ev) )
- {
- if ( child->NeedsUpdate(ev) )
- {
- TempODTransform xf2 = child->AcquireWindowFrameTransform(ev, kODNULL);
- TempODShape tempShape = bShape->Copy(ev);
- tempShape->InverseTransform(ev, xf2);
- child->Draw(ev, tempShape, kODNULL);
- child->DrawChildren(ev, tempShape, kODNULL);
- }
- }
- ODDeleteObject(i);
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: DrawChildrenAlways
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetDrawChildrenAlways(ODFacet *somSelf, Environment *ev,
- ODShape* invalidShape,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","DrawChildrenAlways");
-
- SOM_TRY
- TempODShape bShape = kODNULL;
- if ( invalidShape == kODNULL )
- bShape = ODCopyAndRelease(ev, _fFrame->AcquireFrameShape(ev, kODNULL));
- else
- bShape = BiasShapeSet(ev, invalidShape->Copy(ev), biasCanvas);
- TempODTransform xf1 = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- bShape->Transform(ev, xf1);
-
- ODFacetIterator* i = new ODFacetIterator;
- THROW_IF_NULL(i);
- i->InitFacetIterator(ev, somSelf, kODChildrenOnly, kODBackToFront);
-
- for ( ODFacet* child = i->First(ev); i->IsNotComplete(ev); child = i->Next(ev) )
- {
- TempODTransform xf2 = child->AcquireWindowFrameTransform(ev, kODNULL);
- TempODShape tempShape = bShape->Copy(ev);
- tempShape->InverseTransform(ev, xf2);
- child->Draw(ev, tempShape, kODNULL);
- child->DrawChildrenAlways(ev, tempShape, kODNULL);
- }
- ODDeleteObject(i);
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: InvalidateActiveBorder
- //------------------------------------------------------------------------------
- SOM_Scope void SOMLINK ODFacetInvalidateActiveBorder(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","InvalidateActiveBorder");
-
- SOM_TRY
- if ( _fActiveBorderShape != kODNULL )
- {
- ODInvalidateBorder(ev, _fActiveBorderShape, somSelf);
- ODReleaseObject(ev, _fActiveBorderShape);
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: DrawActiveBorder
- //------------------------------------------------------------------------------
- SOM_Scope void SOMLINK ODFacetDrawActiveBorder(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","DrawActiveBorder");
-
- SOM_TRY
- ODFacet* contFacet = kODNULL;
- TempODPart contPart = kODNULL;
- TempODShape border = kODNULL;
- TempODShape scratch = kODNULL;
- TempODShape adjusted = kODNULL;
- TempODShape clip = kODNULL;
- TempODTransform xform = kODNULL;
- TempODTransform xform2 = kODNULL;
- TempODTransform xform3 = kODNULL;
-
- if ( _fActiveBorderShape == kODNULL )
- {
- // compute border shape
- contFacet = somSelf->GetContainingFacet(ev);
- if ( contFacet )
- {
- contPart = contFacet->GetFrame(ev)->AcquirePart(ev);
- border = ODCopyAndRelease(ev, somSelf->AcquireActiveShape(ev, kNoBias));
- xform = somSelf->AcquireWindowFrameTransform(ev, kNoBias);
- xform2 = contFacet->AcquireWindowFrameTransform(ev, kNoBias);
- border->Transform(ev, xform);
- border->SetGeometryMode(ev, kODLoseGeometry);
- scratch = border->Copy(ev);
-
- border->Outset(ev, ODIntToFixed(4));
- border->Subtract(ev, scratch);
- ODReleaseObject(ev, scratch);
-
- border->InverseTransform(ev, xform);
- adjusted = contPart->AdjustBorderShape(ev, somSelf, border);
- THROW_IF_NULL(adjusted);
- ODReleaseObject(ev, border);
-
- if ( adjusted->IsEmpty(ev) )
- {
- // compute as inset
- scratch = ODCopyAndRelease(ev, contFacet->GetFrame(ev)->AcquireUsedShape(ev, kNoBias));
- scratch->Transform(ev, xform2);
- border = ODCopyAndRelease(ev, somSelf->AcquireActiveShape(ev, kNoBias));
- border->Transform(ev, xform);
- border->Subtract(ev, scratch);
- if ( !border->IsEmpty(ev) )
- {
- ODReleaseObject(ev, adjusted);
- ODReleaseObject(ev, border);
- border = scratch->Copy(ev);
- scratch->Outset(ev, ODIntToFixed(-4));
- border->Subtract(ev, scratch);
- ODReleaseObject(ev, scratch);
-
- border->InverseTransform(ev, xform);
- adjusted = contPart->AdjustBorderShape(ev, somSelf, border);
- THROW_IF_NULL(adjusted);
- ODReleaseObject(ev, border);
- }
- else
- {
- ODReleaseObject(ev, border);
- ODReleaseObject(ev, scratch);
- }
- }
-
- // clip to containing facet's visible area
- clip = ODCopyAndRelease(ev,
- contFacet->AcquireWindowAggregateClipShape(ev, kNoBias));
- xform3 = ODCopyAndRelease(ev,
- contFacet->GetFrame(ev)->AcquireInternalTransform(ev, kNoBias));
- if ( _fExternalTransform != kODNULL )
- xform3->PreCompose(ev, _fExternalTransform);
- clip->InverseTransform(ev, xform3);
- adjusted->Intersect(ev, clip);
-
- adjusted->Transform(ev, xform);
- adjusted->Acquire(ev); // because TempODShape releases on scope exit
- _fActiveBorderShape = adjusted;
- }
- }
-
- ODWindow* window = somSelf->GetWindow(ev);
- if ( _fActiveBorderShape && window && window->IsShown(ev) )
- {
- ODDrawBorder(ev, _fActiveBorderShape, somSelf);
- }
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: DrawnIn
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetDrawnIn(ODFacet *somSelf, Environment *ev,
- ODShape* shape,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","DrawnIn");
-
- // invalidate shape on my parent canvas to ensure that changed
- // pixels get copied to it.
-
- ODCanvas* myCanvas = kODNULL;
- ODFacet* myCanvasFacet = kODNULL;
- ODFacet* containingFacet = kODNULL;
- ODFacet* parentCanvasFacet = kODNULL;
-
- SOM_TRY
- // since the shape has been drawn in, it can now be marked as valid
- somSelf->Validate(ev, shape, biasCanvas);
-
- myCanvas = somSelf->GetCanvas(ev);
-
- // don't need to worry about on-screen canvas - it's the window
- if ( !myCanvas->IsOffscreen(ev) )
- return;
-
- TempODShape tShape = ODCopyAndRelease(ev, somSelf->AcquireAggregateClipShape(ev, kODNULL));
- if ( shape )
- {
- TempODShape bShape = BiasShapeSet(ev, shape->Copy(ev), biasCanvas);
- tShape->Intersect(ev, bShape);
- }
-
- myCanvasFacet = myCanvas->GetFacet(ev);
- containingFacet = myCanvasFacet->GetContainingFacet(ev);
- if ( containingFacet )
- parentCanvasFacet = containingFacet->GetCanvas(ev)->GetFacet(ev);
- else
- THROW(kODErrFacetNotFound);
-
- TempODTransform xform = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
- tShape->Transform(ev, xform);
- ODReleaseObject(ev, xform);
- xform = parentCanvasFacet->AcquireWindowFrameTransform(ev, kODNULL);
- tShape->InverseTransform(ev, xform);
-
- // since stuff was drawn on my canvas, invalidate my parent canvas
- // so that that content will get copied there.
- parentCanvasFacet->Invalidate(ev, tShape, kODNULL);
-
- // notify my canvas' owner that drawing has occurred, and pixels
- // need to be copied to the parent canvas
- TempODPart owner = myCanvas->AcquireOwner(ev);
- WASSERTM( owner != kODNULL, "Facet::DrawnIn - no owner for canvas");
- owner->CanvasUpdated(ev, myCanvas);
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: ContainsPoint
- //------------------------------------------------------------------------------
-
- SOM_Scope ODBoolean SOMLINK ODFacetContainsPoint(ODFacet *somSelf, Environment *ev,
- ODPoint* point,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","ContainsPoint");
-
- ODBoolean result = kODFalse; ODVolatile(result);
-
- SOM_TRY
- ODPoint bPoint = BiasPointSet(ev, point, biasCanvas);
- if ( _fActiveShape || _fClipShape )
- result = ((!_fActiveShape || _fActiveShape->ContainsPoint(ev, &bPoint))
- && (!_fClipShape || _fClipShape->ContainsPoint(ev, &bPoint)));
- else
- {
- TempODShape frameShape = _fFrame->AcquireFrameShape(ev, kNoBias);
- result = frameShape->ContainsPoint(ev, &bPoint);
- }
- SOM_CATCH_ALL
- result = kODFalse;
- SOM_ENDTRY
-
- return result;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: ActiveBorderContainsPoint
- //------------------------------------------------------------------------------
-
- SOM_Scope ODBoolean SOMLINK ODFacetActiveBorderContainsPoint(ODFacet *somSelf, Environment *ev,
- ODPoint* point,
- ODCanvas* biasCanvas)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","ActiveBorderContainsPoint");
-
- if ( _fActiveBorderShape == kODNULL )
- return kODFalse;
-
- SOM_TRY
- ODPoint bPoint = BiasPointSet(ev, point, biasCanvas);
- // transform point to window coordinates
- TempODTransform winToFrame = somSelf->AcquireWindowFrameTransform(ev, kODNULL);
-
- ODPoint framePoint = bPoint;
- winToFrame->TransformPoint(ev, &framePoint);
- return _fActiveBorderShape->ContainsPoint(ev, &framePoint);
- SOM_CATCH_ALL
- SOM_ENDTRY
- return kODFalse;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: IsSelected
- //------------------------------------------------------------------------------
-
- SOM_Scope ODBoolean SOMLINK ODFacetIsSelected(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","IsSelected");
-
- return _fIsSelected;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: SetSelected
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetSetSelected(ODFacet *somSelf, Environment *ev,
- ODBoolean isSelected)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","SetSelected");
-
- _fIsSelected = isSelected;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: GetHighlight
- //------------------------------------------------------------------------------
-
- SOM_Scope ODHighlight SOMLINK ODFacetGetHighlight(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","GetHighlight");
-
- return _fHighlight;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: ChangeHighlight
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetChangeHighlight(ODFacet *somSelf, Environment *ev,
- ODHighlight highlight)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","ChangeHighlight");
-
- SOM_TRY
- _fHighlight = highlight;
- TempODPart tempPart = _fFrame->AcquirePart(ev);
- tempPart->HighlightChanged(ev, somSelf);
- SOM_CATCH_ALL
- SOM_ENDTRY
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: GetNode
- //------------------------------------------------------------------------------
-
- SOM_Scope FacetNode* SOMLINK ODFacetGetNode(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","GetNode");
-
- return _fNode;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: NeedsUpdate
- //------------------------------------------------------------------------------
-
- SOM_Scope ODBoolean SOMLINK ODFacetNeedsUpdate(ODFacet *somSelf, Environment *ev)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","NeedsUpdate");
-
- return _fNeedsUpdate;
- }
-
- //------------------------------------------------------------------------------
- // ODFacet: SetNeedsUpdate
- //------------------------------------------------------------------------------
-
- SOM_Scope void SOMLINK ODFacetSetNeedsUpdate(ODFacet *somSelf, Environment *ev,
- ODBoolean needsUpdate)
- {
- ODFacetData *somThis = ODFacetGetData(somSelf);
- ODFacetMethodDebug("ODFacet","SetNeedsUpdate");
-
- _fNeedsUpdate = needsUpdate;
- }
-